package de.sabram.upb.specs.ui.contentassist.antlr.internal; 

import java.io.InputStream;
import org.eclipse.xtext.*;
import org.eclipse.xtext.parser.*;
import org.eclipse.xtext.parser.impl.*;
import org.eclipse.emf.ecore.util.EcoreUtil;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.xtext.parser.antlr.XtextTokenStream;
import org.eclipse.xtext.parser.antlr.XtextTokenStream.HiddenTokens;
import org.eclipse.xtext.ui.editor.contentassist.antlr.internal.AbstractInternalContentAssistParser;
import org.eclipse.xtext.ui.editor.contentassist.antlr.internal.DFA;
import de.sabram.upb.specs.services.PtgGrammarAccess;



import org.antlr.runtime.*;
import java.util.Stack;
import java.util.List;
import java.util.ArrayList;

@SuppressWarnings("all")
public class InternalPtgParser extends AbstractInternalContentAssistParser {
    public static final String[] tokenNames = new String[] {
        "<invalid>", "<EOR>", "<DOWN>", "<UP>", "RULE_ID", "RULE_STRING", "RULE_INT", "RULE_SL_COMMENT", "RULE_ML_COMMENT", "RULE_WS", "RULE_ANY_OTHER", "'char'", "'double'", "'float'", "'int'", "'long'", "'pointer'", "'short'", "'string'", "':'", "'{'", "'}'", "'['", "']'", "'$'"
    };
    public static final int RULE_ID=4;
    public static final int T__24=24;
    public static final int T__23=23;
    public static final int T__22=22;
    public static final int RULE_ANY_OTHER=10;
    public static final int T__21=21;
    public static final int T__20=20;
    public static final int RULE_SL_COMMENT=7;
    public static final int EOF=-1;
    public static final int RULE_ML_COMMENT=8;
    public static final int T__19=19;
    public static final int RULE_STRING=5;
    public static final int T__16=16;
    public static final int T__15=15;
    public static final int T__18=18;
    public static final int T__17=17;
    public static final int T__12=12;
    public static final int T__11=11;
    public static final int T__14=14;
    public static final int T__13=13;
    public static final int RULE_INT=6;
    public static final int RULE_WS=9;

    // delegates
    // delegators


        public InternalPtgParser(TokenStream input) {
            this(input, new RecognizerSharedState());
        }
        public InternalPtgParser(TokenStream input, RecognizerSharedState state) {
            super(input, state);
             
        }
        

    public String[] getTokenNames() { return InternalPtgParser.tokenNames; }
    public String getGrammarFileName() { return "../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g"; }


     
     	private PtgGrammarAccess grammarAccess;
     	
        public void setGrammarAccess(PtgGrammarAccess grammarAccess) {
        	this.grammarAccess = grammarAccess;
        }
        
        @Override
        protected Grammar getGrammar() {
        	return grammarAccess.getGrammar();
        }
        
        @Override
        protected String getValueForTokenName(String tokenName) {
        	return tokenName;
        }




    // $ANTLR start "entryRulePTGSpec"
    // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:60:1: entryRulePTGSpec : rulePTGSpec EOF ;
    public final void entryRulePTGSpec() throws RecognitionException {
        try {
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:61:1: ( rulePTGSpec EOF )
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:62:1: rulePTGSpec EOF
            {
             before(grammarAccess.getPTGSpecRule()); 
            pushFollow(FOLLOW_rulePTGSpec_in_entryRulePTGSpec61);
            rulePTGSpec();

            state._fsp--;

             after(grammarAccess.getPTGSpecRule()); 
            match(input,EOF,FOLLOW_EOF_in_entryRulePTGSpec68); 

            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return ;
    }
    // $ANTLR end "entryRulePTGSpec"


    // $ANTLR start "rulePTGSpec"
    // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:69:1: rulePTGSpec : ( ( rule__PTGSpec__PtgspecsAssignment )* ) ;
    public final void rulePTGSpec() throws RecognitionException {

        		int stackSize = keepStackSize();
            
        try {
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:73:2: ( ( ( rule__PTGSpec__PtgspecsAssignment )* ) )
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:74:1: ( ( rule__PTGSpec__PtgspecsAssignment )* )
            {
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:74:1: ( ( rule__PTGSpec__PtgspecsAssignment )* )
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:75:1: ( rule__PTGSpec__PtgspecsAssignment )*
            {
             before(grammarAccess.getPTGSpecAccess().getPtgspecsAssignment()); 
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:76:1: ( rule__PTGSpec__PtgspecsAssignment )*
            loop1:
            do {
                int alt1=2;
                int LA1_0 = input.LA(1);

                if ( (LA1_0==RULE_ID) ) {
                    alt1=1;
                }


                switch (alt1) {
            	case 1 :
            	    // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:76:2: rule__PTGSpec__PtgspecsAssignment
            	    {
            	    pushFollow(FOLLOW_rule__PTGSpec__PtgspecsAssignment_in_rulePTGSpec94);
            	    rule__PTGSpec__PtgspecsAssignment();

            	    state._fsp--;


            	    }
            	    break;

            	default :
            	    break loop1;
                }
            } while (true);

             after(grammarAccess.getPTGSpecAccess().getPtgspecsAssignment()); 

            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rulePTGSpec"


    // $ANTLR start "entryRulePatternSpec"
    // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:88:1: entryRulePatternSpec : rulePatternSpec EOF ;
    public final void entryRulePatternSpec() throws RecognitionException {
        try {
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:89:1: ( rulePatternSpec EOF )
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:90:1: rulePatternSpec EOF
            {
             before(grammarAccess.getPatternSpecRule()); 
            pushFollow(FOLLOW_rulePatternSpec_in_entryRulePatternSpec122);
            rulePatternSpec();

            state._fsp--;

             after(grammarAccess.getPatternSpecRule()); 
            match(input,EOF,FOLLOW_EOF_in_entryRulePatternSpec129); 

            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return ;
    }
    // $ANTLR end "entryRulePatternSpec"


    // $ANTLR start "rulePatternSpec"
    // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:97:1: rulePatternSpec : ( ( rule__PatternSpec__Group__0 ) ) ;
    public final void rulePatternSpec() throws RecognitionException {

        		int stackSize = keepStackSize();
            
        try {
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:101:2: ( ( ( rule__PatternSpec__Group__0 ) ) )
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:102:1: ( ( rule__PatternSpec__Group__0 ) )
            {
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:102:1: ( ( rule__PatternSpec__Group__0 ) )
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:103:1: ( rule__PatternSpec__Group__0 )
            {
             before(grammarAccess.getPatternSpecAccess().getGroup()); 
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:104:1: ( rule__PatternSpec__Group__0 )
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:104:2: rule__PatternSpec__Group__0
            {
            pushFollow(FOLLOW_rule__PatternSpec__Group__0_in_rulePatternSpec155);
            rule__PatternSpec__Group__0();

            state._fsp--;


            }

             after(grammarAccess.getPatternSpecAccess().getGroup()); 

            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rulePatternSpec"


    // $ANTLR start "entryRulePatternBody"
    // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:116:1: entryRulePatternBody : rulePatternBody EOF ;
    public final void entryRulePatternBody() throws RecognitionException {
        try {
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:117:1: ( rulePatternBody EOF )
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:118:1: rulePatternBody EOF
            {
             before(grammarAccess.getPatternBodyRule()); 
            pushFollow(FOLLOW_rulePatternBody_in_entryRulePatternBody182);
            rulePatternBody();

            state._fsp--;

             after(grammarAccess.getPatternBodyRule()); 
            match(input,EOF,FOLLOW_EOF_in_entryRulePatternBody189); 

            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return ;
    }
    // $ANTLR end "entryRulePatternBody"


    // $ANTLR start "rulePatternBody"
    // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:125:1: rulePatternBody : ( ( rule__PatternBody__Group__0 ) ) ;
    public final void rulePatternBody() throws RecognitionException {

        		int stackSize = keepStackSize();
            
        try {
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:129:2: ( ( ( rule__PatternBody__Group__0 ) ) )
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:130:1: ( ( rule__PatternBody__Group__0 ) )
            {
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:130:1: ( ( rule__PatternBody__Group__0 ) )
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:131:1: ( rule__PatternBody__Group__0 )
            {
             before(grammarAccess.getPatternBodyAccess().getGroup()); 
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:132:1: ( rule__PatternBody__Group__0 )
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:132:2: rule__PatternBody__Group__0
            {
            pushFollow(FOLLOW_rule__PatternBody__Group__0_in_rulePatternBody215);
            rule__PatternBody__Group__0();

            state._fsp--;


            }

             after(grammarAccess.getPatternBodyAccess().getGroup()); 

            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rulePatternBody"


    // $ANTLR start "entryRuleOptional"
    // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:144:1: entryRuleOptional : ruleOptional EOF ;
    public final void entryRuleOptional() throws RecognitionException {
        try {
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:145:1: ( ruleOptional EOF )
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:146:1: ruleOptional EOF
            {
             before(grammarAccess.getOptionalRule()); 
            pushFollow(FOLLOW_ruleOptional_in_entryRuleOptional242);
            ruleOptional();

            state._fsp--;

             after(grammarAccess.getOptionalRule()); 
            match(input,EOF,FOLLOW_EOF_in_entryRuleOptional249); 

            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return ;
    }
    // $ANTLR end "entryRuleOptional"


    // $ANTLR start "ruleOptional"
    // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:153:1: ruleOptional : ( ( rule__Optional__Group__0 ) ) ;
    public final void ruleOptional() throws RecognitionException {

        		int stackSize = keepStackSize();
            
        try {
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:157:2: ( ( ( rule__Optional__Group__0 ) ) )
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:158:1: ( ( rule__Optional__Group__0 ) )
            {
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:158:1: ( ( rule__Optional__Group__0 ) )
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:159:1: ( rule__Optional__Group__0 )
            {
             before(grammarAccess.getOptionalAccess().getGroup()); 
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:160:1: ( rule__Optional__Group__0 )
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:160:2: rule__Optional__Group__0
            {
            pushFollow(FOLLOW_rule__Optional__Group__0_in_ruleOptional275);
            rule__Optional__Group__0();

            state._fsp--;


            }

             after(grammarAccess.getOptionalAccess().getGroup()); 

            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "ruleOptional"


    // $ANTLR start "entryRuleItem"
    // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:172:1: entryRuleItem : ruleItem EOF ;
    public final void entryRuleItem() throws RecognitionException {
        try {
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:173:1: ( ruleItem EOF )
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:174:1: ruleItem EOF
            {
             before(grammarAccess.getItemRule()); 
            pushFollow(FOLLOW_ruleItem_in_entryRuleItem302);
            ruleItem();

            state._fsp--;

             after(grammarAccess.getItemRule()); 
            match(input,EOF,FOLLOW_EOF_in_entryRuleItem309); 

            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return ;
    }
    // $ANTLR end "entryRuleItem"


    // $ANTLR start "ruleItem"
    // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:181:1: ruleItem : ( ( rule__Item__Alternatives ) ) ;
    public final void ruleItem() throws RecognitionException {

        		int stackSize = keepStackSize();
            
        try {
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:185:2: ( ( ( rule__Item__Alternatives ) ) )
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:186:1: ( ( rule__Item__Alternatives ) )
            {
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:186:1: ( ( rule__Item__Alternatives ) )
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:187:1: ( rule__Item__Alternatives )
            {
             before(grammarAccess.getItemAccess().getAlternatives()); 
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:188:1: ( rule__Item__Alternatives )
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:188:2: rule__Item__Alternatives
            {
            pushFollow(FOLLOW_rule__Item__Alternatives_in_ruleItem335);
            rule__Item__Alternatives();

            state._fsp--;


            }

             after(grammarAccess.getItemAccess().getAlternatives()); 

            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "ruleItem"


    // $ANTLR start "entryRuleFunctionCall"
    // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:200:1: entryRuleFunctionCall : ruleFunctionCall EOF ;
    public final void entryRuleFunctionCall() throws RecognitionException {
        try {
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:201:1: ( ruleFunctionCall EOF )
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:202:1: ruleFunctionCall EOF
            {
             before(grammarAccess.getFunctionCallRule()); 
            pushFollow(FOLLOW_ruleFunctionCall_in_entryRuleFunctionCall362);
            ruleFunctionCall();

            state._fsp--;

             after(grammarAccess.getFunctionCallRule()); 
            match(input,EOF,FOLLOW_EOF_in_entryRuleFunctionCall369); 

            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return ;
    }
    // $ANTLR end "entryRuleFunctionCall"


    // $ANTLR start "ruleFunctionCall"
    // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:209:1: ruleFunctionCall : ( ( rule__FunctionCall__Group__0 ) ) ;
    public final void ruleFunctionCall() throws RecognitionException {

        		int stackSize = keepStackSize();
            
        try {
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:213:2: ( ( ( rule__FunctionCall__Group__0 ) ) )
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:214:1: ( ( rule__FunctionCall__Group__0 ) )
            {
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:214:1: ( ( rule__FunctionCall__Group__0 ) )
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:215:1: ( rule__FunctionCall__Group__0 )
            {
             before(grammarAccess.getFunctionCallAccess().getGroup()); 
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:216:1: ( rule__FunctionCall__Group__0 )
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:216:2: rule__FunctionCall__Group__0
            {
            pushFollow(FOLLOW_rule__FunctionCall__Group__0_in_ruleFunctionCall395);
            rule__FunctionCall__Group__0();

            state._fsp--;


            }

             after(grammarAccess.getFunctionCallAccess().getGroup()); 

            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "ruleFunctionCall"


    // $ANTLR start "entryRuleArgument"
    // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:228:1: entryRuleArgument : ruleArgument EOF ;
    public final void entryRuleArgument() throws RecognitionException {
        try {
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:229:1: ( ruleArgument EOF )
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:230:1: ruleArgument EOF
            {
             before(grammarAccess.getArgumentRule()); 
            pushFollow(FOLLOW_ruleArgument_in_entryRuleArgument422);
            ruleArgument();

            state._fsp--;

             after(grammarAccess.getArgumentRule()); 
            match(input,EOF,FOLLOW_EOF_in_entryRuleArgument429); 

            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return ;
    }
    // $ANTLR end "entryRuleArgument"


    // $ANTLR start "ruleArgument"
    // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:237:1: ruleArgument : ( ( rule__Argument__InsertionAssignment ) ) ;
    public final void ruleArgument() throws RecognitionException {

        		int stackSize = keepStackSize();
            
        try {
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:241:2: ( ( ( rule__Argument__InsertionAssignment ) ) )
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:242:1: ( ( rule__Argument__InsertionAssignment ) )
            {
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:242:1: ( ( rule__Argument__InsertionAssignment ) )
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:243:1: ( rule__Argument__InsertionAssignment )
            {
             before(grammarAccess.getArgumentAccess().getInsertionAssignment()); 
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:244:1: ( rule__Argument__InsertionAssignment )
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:244:2: rule__Argument__InsertionAssignment
            {
            pushFollow(FOLLOW_rule__Argument__InsertionAssignment_in_ruleArgument455);
            rule__Argument__InsertionAssignment();

            state._fsp--;


            }

             after(grammarAccess.getArgumentAccess().getInsertionAssignment()); 

            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "ruleArgument"


    // $ANTLR start "entryRuleInsertion"
    // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:256:1: entryRuleInsertion : ruleInsertion EOF ;
    public final void entryRuleInsertion() throws RecognitionException {
        try {
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:257:1: ( ruleInsertion EOF )
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:258:1: ruleInsertion EOF
            {
             before(grammarAccess.getInsertionRule()); 
            pushFollow(FOLLOW_ruleInsertion_in_entryRuleInsertion482);
            ruleInsertion();

            state._fsp--;

             after(grammarAccess.getInsertionRule()); 
            match(input,EOF,FOLLOW_EOF_in_entryRuleInsertion489); 

            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return ;
    }
    // $ANTLR end "entryRuleInsertion"


    // $ANTLR start "ruleInsertion"
    // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:265:1: ruleInsertion : ( ( rule__Insertion__Group__0 ) ) ;
    public final void ruleInsertion() throws RecognitionException {

        		int stackSize = keepStackSize();
            
        try {
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:269:2: ( ( ( rule__Insertion__Group__0 ) ) )
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:270:1: ( ( rule__Insertion__Group__0 ) )
            {
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:270:1: ( ( rule__Insertion__Group__0 ) )
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:271:1: ( rule__Insertion__Group__0 )
            {
             before(grammarAccess.getInsertionAccess().getGroup()); 
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:272:1: ( rule__Insertion__Group__0 )
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:272:2: rule__Insertion__Group__0
            {
            pushFollow(FOLLOW_rule__Insertion__Group__0_in_ruleInsertion515);
            rule__Insertion__Group__0();

            state._fsp--;


            }

             after(grammarAccess.getInsertionAccess().getGroup()); 

            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "ruleInsertion"


    // $ANTLR start "entryRuleType"
    // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:284:1: entryRuleType : ruleType EOF ;
    public final void entryRuleType() throws RecognitionException {
        try {
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:285:1: ( ruleType EOF )
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:286:1: ruleType EOF
            {
             before(grammarAccess.getTypeRule()); 
            pushFollow(FOLLOW_ruleType_in_entryRuleType542);
            ruleType();

            state._fsp--;

             after(grammarAccess.getTypeRule()); 
            match(input,EOF,FOLLOW_EOF_in_entryRuleType549); 

            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return ;
    }
    // $ANTLR end "entryRuleType"


    // $ANTLR start "ruleType"
    // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:293:1: ruleType : ( ( rule__Type__NameAssignment ) ) ;
    public final void ruleType() throws RecognitionException {

        		int stackSize = keepStackSize();
            
        try {
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:297:2: ( ( ( rule__Type__NameAssignment ) ) )
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:298:1: ( ( rule__Type__NameAssignment ) )
            {
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:298:1: ( ( rule__Type__NameAssignment ) )
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:299:1: ( rule__Type__NameAssignment )
            {
             before(grammarAccess.getTypeAccess().getNameAssignment()); 
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:300:1: ( rule__Type__NameAssignment )
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:300:2: rule__Type__NameAssignment
            {
            pushFollow(FOLLOW_rule__Type__NameAssignment_in_ruleType575);
            rule__Type__NameAssignment();

            state._fsp--;


            }

             after(grammarAccess.getTypeAccess().getNameAssignment()); 

            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "ruleType"


    // $ANTLR start "rule__PatternBody__PatternBodyAlternatives_1_0"
    // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:312:1: rule__PatternBody__PatternBodyAlternatives_1_0 : ( ( ruleItem ) | ( ruleOptional ) );
    public final void rule__PatternBody__PatternBodyAlternatives_1_0() throws RecognitionException {

        		int stackSize = keepStackSize();
            
        try {
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:316:1: ( ( ruleItem ) | ( ruleOptional ) )
            int alt2=2;
            int LA2_0 = input.LA(1);

            if ( (LA2_0==RULE_STRING||LA2_0==22||LA2_0==24) ) {
                alt2=1;
            }
            else if ( (LA2_0==20) ) {
                alt2=2;
            }
            else {
                NoViableAltException nvae =
                    new NoViableAltException("", 2, 0, input);

                throw nvae;
            }
            switch (alt2) {
                case 1 :
                    // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:317:1: ( ruleItem )
                    {
                    // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:317:1: ( ruleItem )
                    // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:318:1: ruleItem
                    {
                     before(grammarAccess.getPatternBodyAccess().getPatternBodyItemParserRuleCall_1_0_0()); 
                    pushFollow(FOLLOW_ruleItem_in_rule__PatternBody__PatternBodyAlternatives_1_0611);
                    ruleItem();

                    state._fsp--;

                     after(grammarAccess.getPatternBodyAccess().getPatternBodyItemParserRuleCall_1_0_0()); 

                    }


                    }
                    break;
                case 2 :
                    // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:323:6: ( ruleOptional )
                    {
                    // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:323:6: ( ruleOptional )
                    // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:324:1: ruleOptional
                    {
                     before(grammarAccess.getPatternBodyAccess().getPatternBodyOptionalParserRuleCall_1_0_1()); 
                    pushFollow(FOLLOW_ruleOptional_in_rule__PatternBody__PatternBodyAlternatives_1_0628);
                    ruleOptional();

                    state._fsp--;

                     after(grammarAccess.getPatternBodyAccess().getPatternBodyOptionalParserRuleCall_1_0_1()); 

                    }


                    }
                    break;

            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__PatternBody__PatternBodyAlternatives_1_0"


    // $ANTLR start "rule__Item__Alternatives"
    // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:334:1: rule__Item__Alternatives : ( ( ( rule__Item__ItemNameAssignment_0 ) ) | ( ( rule__Item__ItemCallAssignment_1 ) ) | ( ( rule__Item__InsertionAssignment_2 ) ) );
    public final void rule__Item__Alternatives() throws RecognitionException {

        		int stackSize = keepStackSize();
            
        try {
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:338:1: ( ( ( rule__Item__ItemNameAssignment_0 ) ) | ( ( rule__Item__ItemCallAssignment_1 ) ) | ( ( rule__Item__InsertionAssignment_2 ) ) )
            int alt3=3;
            switch ( input.LA(1) ) {
            case RULE_STRING:
                {
                alt3=1;
                }
                break;
            case 22:
                {
                alt3=2;
                }
                break;
            case 24:
                {
                alt3=3;
                }
                break;
            default:
                NoViableAltException nvae =
                    new NoViableAltException("", 3, 0, input);

                throw nvae;
            }

            switch (alt3) {
                case 1 :
                    // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:339:1: ( ( rule__Item__ItemNameAssignment_0 ) )
                    {
                    // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:339:1: ( ( rule__Item__ItemNameAssignment_0 ) )
                    // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:340:1: ( rule__Item__ItemNameAssignment_0 )
                    {
                     before(grammarAccess.getItemAccess().getItemNameAssignment_0()); 
                    // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:341:1: ( rule__Item__ItemNameAssignment_0 )
                    // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:341:2: rule__Item__ItemNameAssignment_0
                    {
                    pushFollow(FOLLOW_rule__Item__ItemNameAssignment_0_in_rule__Item__Alternatives660);
                    rule__Item__ItemNameAssignment_0();

                    state._fsp--;


                    }

                     after(grammarAccess.getItemAccess().getItemNameAssignment_0()); 

                    }


                    }
                    break;
                case 2 :
                    // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:345:6: ( ( rule__Item__ItemCallAssignment_1 ) )
                    {
                    // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:345:6: ( ( rule__Item__ItemCallAssignment_1 ) )
                    // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:346:1: ( rule__Item__ItemCallAssignment_1 )
                    {
                     before(grammarAccess.getItemAccess().getItemCallAssignment_1()); 
                    // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:347:1: ( rule__Item__ItemCallAssignment_1 )
                    // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:347:2: rule__Item__ItemCallAssignment_1
                    {
                    pushFollow(FOLLOW_rule__Item__ItemCallAssignment_1_in_rule__Item__Alternatives678);
                    rule__Item__ItemCallAssignment_1();

                    state._fsp--;


                    }

                     after(grammarAccess.getItemAccess().getItemCallAssignment_1()); 

                    }


                    }
                    break;
                case 3 :
                    // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:351:6: ( ( rule__Item__InsertionAssignment_2 ) )
                    {
                    // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:351:6: ( ( rule__Item__InsertionAssignment_2 ) )
                    // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:352:1: ( rule__Item__InsertionAssignment_2 )
                    {
                     before(grammarAccess.getItemAccess().getInsertionAssignment_2()); 
                    // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:353:1: ( rule__Item__InsertionAssignment_2 )
                    // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:353:2: rule__Item__InsertionAssignment_2
                    {
                    pushFollow(FOLLOW_rule__Item__InsertionAssignment_2_in_rule__Item__Alternatives696);
                    rule__Item__InsertionAssignment_2();

                    state._fsp--;


                    }

                     after(grammarAccess.getItemAccess().getInsertionAssignment_2()); 

                    }


                    }
                    break;

            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__Item__Alternatives"


    // $ANTLR start "rule__Type__NameAlternatives_0"
    // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:362:1: rule__Type__NameAlternatives_0 : ( ( 'char' ) | ( 'double' ) | ( 'float' ) | ( 'int' ) | ( 'long' ) | ( 'pointer' ) | ( 'short' ) | ( 'string' ) );
    public final void rule__Type__NameAlternatives_0() throws RecognitionException {

        		int stackSize = keepStackSize();
            
        try {
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:366:1: ( ( 'char' ) | ( 'double' ) | ( 'float' ) | ( 'int' ) | ( 'long' ) | ( 'pointer' ) | ( 'short' ) | ( 'string' ) )
            int alt4=8;
            switch ( input.LA(1) ) {
            case 11:
                {
                alt4=1;
                }
                break;
            case 12:
                {
                alt4=2;
                }
                break;
            case 13:
                {
                alt4=3;
                }
                break;
            case 14:
                {
                alt4=4;
                }
                break;
            case 15:
                {
                alt4=5;
                }
                break;
            case 16:
                {
                alt4=6;
                }
                break;
            case 17:
                {
                alt4=7;
                }
                break;
            case 18:
                {
                alt4=8;
                }
                break;
            default:
                NoViableAltException nvae =
                    new NoViableAltException("", 4, 0, input);

                throw nvae;
            }

            switch (alt4) {
                case 1 :
                    // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:367:1: ( 'char' )
                    {
                    // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:367:1: ( 'char' )
                    // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:368:1: 'char'
                    {
                     before(grammarAccess.getTypeAccess().getNameCharKeyword_0_0()); 
                    match(input,11,FOLLOW_11_in_rule__Type__NameAlternatives_0730); 
                     after(grammarAccess.getTypeAccess().getNameCharKeyword_0_0()); 

                    }


                    }
                    break;
                case 2 :
                    // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:375:6: ( 'double' )
                    {
                    // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:375:6: ( 'double' )
                    // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:376:1: 'double'
                    {
                     before(grammarAccess.getTypeAccess().getNameDoubleKeyword_0_1()); 
                    match(input,12,FOLLOW_12_in_rule__Type__NameAlternatives_0750); 
                     after(grammarAccess.getTypeAccess().getNameDoubleKeyword_0_1()); 

                    }


                    }
                    break;
                case 3 :
                    // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:383:6: ( 'float' )
                    {
                    // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:383:6: ( 'float' )
                    // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:384:1: 'float'
                    {
                     before(grammarAccess.getTypeAccess().getNameFloatKeyword_0_2()); 
                    match(input,13,FOLLOW_13_in_rule__Type__NameAlternatives_0770); 
                     after(grammarAccess.getTypeAccess().getNameFloatKeyword_0_2()); 

                    }


                    }
                    break;
                case 4 :
                    // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:391:6: ( 'int' )
                    {
                    // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:391:6: ( 'int' )
                    // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:392:1: 'int'
                    {
                     before(grammarAccess.getTypeAccess().getNameIntKeyword_0_3()); 
                    match(input,14,FOLLOW_14_in_rule__Type__NameAlternatives_0790); 
                     after(grammarAccess.getTypeAccess().getNameIntKeyword_0_3()); 

                    }


                    }
                    break;
                case 5 :
                    // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:399:6: ( 'long' )
                    {
                    // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:399:6: ( 'long' )
                    // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:400:1: 'long'
                    {
                     before(grammarAccess.getTypeAccess().getNameLongKeyword_0_4()); 
                    match(input,15,FOLLOW_15_in_rule__Type__NameAlternatives_0810); 
                     after(grammarAccess.getTypeAccess().getNameLongKeyword_0_4()); 

                    }


                    }
                    break;
                case 6 :
                    // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:407:6: ( 'pointer' )
                    {
                    // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:407:6: ( 'pointer' )
                    // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:408:1: 'pointer'
                    {
                     before(grammarAccess.getTypeAccess().getNamePointerKeyword_0_5()); 
                    match(input,16,FOLLOW_16_in_rule__Type__NameAlternatives_0830); 
                     after(grammarAccess.getTypeAccess().getNamePointerKeyword_0_5()); 

                    }


                    }
                    break;
                case 7 :
                    // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:415:6: ( 'short' )
                    {
                    // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:415:6: ( 'short' )
                    // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:416:1: 'short'
                    {
                     before(grammarAccess.getTypeAccess().getNameShortKeyword_0_6()); 
                    match(input,17,FOLLOW_17_in_rule__Type__NameAlternatives_0850); 
                     after(grammarAccess.getTypeAccess().getNameShortKeyword_0_6()); 

                    }


                    }
                    break;
                case 8 :
                    // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:423:6: ( 'string' )
                    {
                    // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:423:6: ( 'string' )
                    // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:424:1: 'string'
                    {
                     before(grammarAccess.getTypeAccess().getNameStringKeyword_0_7()); 
                    match(input,18,FOLLOW_18_in_rule__Type__NameAlternatives_0870); 
                     after(grammarAccess.getTypeAccess().getNameStringKeyword_0_7()); 

                    }


                    }
                    break;

            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__Type__NameAlternatives_0"


    // $ANTLR start "rule__PatternSpec__Group__0"
    // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:438:1: rule__PatternSpec__Group__0 : rule__PatternSpec__Group__0__Impl rule__PatternSpec__Group__1 ;
    public final void rule__PatternSpec__Group__0() throws RecognitionException {

        		int stackSize = keepStackSize();
            
        try {
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:442:1: ( rule__PatternSpec__Group__0__Impl rule__PatternSpec__Group__1 )
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:443:2: rule__PatternSpec__Group__0__Impl rule__PatternSpec__Group__1
            {
            pushFollow(FOLLOW_rule__PatternSpec__Group__0__Impl_in_rule__PatternSpec__Group__0902);
            rule__PatternSpec__Group__0__Impl();

            state._fsp--;

            pushFollow(FOLLOW_rule__PatternSpec__Group__1_in_rule__PatternSpec__Group__0905);
            rule__PatternSpec__Group__1();

            state._fsp--;


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__PatternSpec__Group__0"


    // $ANTLR start "rule__PatternSpec__Group__0__Impl"
    // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:450:1: rule__PatternSpec__Group__0__Impl : ( ( rule__PatternSpec__NameAssignment_0 ) ) ;
    public final void rule__PatternSpec__Group__0__Impl() throws RecognitionException {

        		int stackSize = keepStackSize();
            
        try {
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:454:1: ( ( ( rule__PatternSpec__NameAssignment_0 ) ) )
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:455:1: ( ( rule__PatternSpec__NameAssignment_0 ) )
            {
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:455:1: ( ( rule__PatternSpec__NameAssignment_0 ) )
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:456:1: ( rule__PatternSpec__NameAssignment_0 )
            {
             before(grammarAccess.getPatternSpecAccess().getNameAssignment_0()); 
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:457:1: ( rule__PatternSpec__NameAssignment_0 )
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:457:2: rule__PatternSpec__NameAssignment_0
            {
            pushFollow(FOLLOW_rule__PatternSpec__NameAssignment_0_in_rule__PatternSpec__Group__0__Impl932);
            rule__PatternSpec__NameAssignment_0();

            state._fsp--;


            }

             after(grammarAccess.getPatternSpecAccess().getNameAssignment_0()); 

            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__PatternSpec__Group__0__Impl"


    // $ANTLR start "rule__PatternSpec__Group__1"
    // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:467:1: rule__PatternSpec__Group__1 : rule__PatternSpec__Group__1__Impl rule__PatternSpec__Group__2 ;
    public final void rule__PatternSpec__Group__1() throws RecognitionException {

        		int stackSize = keepStackSize();
            
        try {
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:471:1: ( rule__PatternSpec__Group__1__Impl rule__PatternSpec__Group__2 )
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:472:2: rule__PatternSpec__Group__1__Impl rule__PatternSpec__Group__2
            {
            pushFollow(FOLLOW_rule__PatternSpec__Group__1__Impl_in_rule__PatternSpec__Group__1962);
            rule__PatternSpec__Group__1__Impl();

            state._fsp--;

            pushFollow(FOLLOW_rule__PatternSpec__Group__2_in_rule__PatternSpec__Group__1965);
            rule__PatternSpec__Group__2();

            state._fsp--;


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__PatternSpec__Group__1"


    // $ANTLR start "rule__PatternSpec__Group__1__Impl"
    // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:479:1: rule__PatternSpec__Group__1__Impl : ( ':' ) ;
    public final void rule__PatternSpec__Group__1__Impl() throws RecognitionException {

        		int stackSize = keepStackSize();
            
        try {
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:483:1: ( ( ':' ) )
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:484:1: ( ':' )
            {
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:484:1: ( ':' )
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:485:1: ':'
            {
             before(grammarAccess.getPatternSpecAccess().getColonKeyword_1()); 
            match(input,19,FOLLOW_19_in_rule__PatternSpec__Group__1__Impl993); 
             after(grammarAccess.getPatternSpecAccess().getColonKeyword_1()); 

            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__PatternSpec__Group__1__Impl"


    // $ANTLR start "rule__PatternSpec__Group__2"
    // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:498:1: rule__PatternSpec__Group__2 : rule__PatternSpec__Group__2__Impl ;
    public final void rule__PatternSpec__Group__2() throws RecognitionException {

        		int stackSize = keepStackSize();
            
        try {
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:502:1: ( rule__PatternSpec__Group__2__Impl )
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:503:2: rule__PatternSpec__Group__2__Impl
            {
            pushFollow(FOLLOW_rule__PatternSpec__Group__2__Impl_in_rule__PatternSpec__Group__21024);
            rule__PatternSpec__Group__2__Impl();

            state._fsp--;


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__PatternSpec__Group__2"


    // $ANTLR start "rule__PatternSpec__Group__2__Impl"
    // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:509:1: rule__PatternSpec__Group__2__Impl : ( ( rule__PatternSpec__PatternBodyAssignment_2 ) ) ;
    public final void rule__PatternSpec__Group__2__Impl() throws RecognitionException {

        		int stackSize = keepStackSize();
            
        try {
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:513:1: ( ( ( rule__PatternSpec__PatternBodyAssignment_2 ) ) )
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:514:1: ( ( rule__PatternSpec__PatternBodyAssignment_2 ) )
            {
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:514:1: ( ( rule__PatternSpec__PatternBodyAssignment_2 ) )
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:515:1: ( rule__PatternSpec__PatternBodyAssignment_2 )
            {
             before(grammarAccess.getPatternSpecAccess().getPatternBodyAssignment_2()); 
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:516:1: ( rule__PatternSpec__PatternBodyAssignment_2 )
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:516:2: rule__PatternSpec__PatternBodyAssignment_2
            {
            pushFollow(FOLLOW_rule__PatternSpec__PatternBodyAssignment_2_in_rule__PatternSpec__Group__2__Impl1051);
            rule__PatternSpec__PatternBodyAssignment_2();

            state._fsp--;


            }

             after(grammarAccess.getPatternSpecAccess().getPatternBodyAssignment_2()); 

            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__PatternSpec__Group__2__Impl"


    // $ANTLR start "rule__PatternBody__Group__0"
    // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:532:1: rule__PatternBody__Group__0 : rule__PatternBody__Group__0__Impl rule__PatternBody__Group__1 ;
    public final void rule__PatternBody__Group__0() throws RecognitionException {

        		int stackSize = keepStackSize();
            
        try {
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:536:1: ( rule__PatternBody__Group__0__Impl rule__PatternBody__Group__1 )
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:537:2: rule__PatternBody__Group__0__Impl rule__PatternBody__Group__1
            {
            pushFollow(FOLLOW_rule__PatternBody__Group__0__Impl_in_rule__PatternBody__Group__01087);
            rule__PatternBody__Group__0__Impl();

            state._fsp--;

            pushFollow(FOLLOW_rule__PatternBody__Group__1_in_rule__PatternBody__Group__01090);
            rule__PatternBody__Group__1();

            state._fsp--;


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__PatternBody__Group__0"


    // $ANTLR start "rule__PatternBody__Group__0__Impl"
    // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:544:1: rule__PatternBody__Group__0__Impl : ( () ) ;
    public final void rule__PatternBody__Group__0__Impl() throws RecognitionException {

        		int stackSize = keepStackSize();
            
        try {
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:548:1: ( ( () ) )
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:549:1: ( () )
            {
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:549:1: ( () )
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:550:1: ()
            {
             before(grammarAccess.getPatternBodyAccess().getPatternBodyAction_0()); 
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:551:1: ()
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:553:1: 
            {
            }

             after(grammarAccess.getPatternBodyAccess().getPatternBodyAction_0()); 

            }


            }

        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__PatternBody__Group__0__Impl"


    // $ANTLR start "rule__PatternBody__Group__1"
    // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:563:1: rule__PatternBody__Group__1 : rule__PatternBody__Group__1__Impl ;
    public final void rule__PatternBody__Group__1() throws RecognitionException {

        		int stackSize = keepStackSize();
            
        try {
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:567:1: ( rule__PatternBody__Group__1__Impl )
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:568:2: rule__PatternBody__Group__1__Impl
            {
            pushFollow(FOLLOW_rule__PatternBody__Group__1__Impl_in_rule__PatternBody__Group__11148);
            rule__PatternBody__Group__1__Impl();

            state._fsp--;


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__PatternBody__Group__1"


    // $ANTLR start "rule__PatternBody__Group__1__Impl"
    // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:574:1: rule__PatternBody__Group__1__Impl : ( ( rule__PatternBody__PatternBodyAssignment_1 )* ) ;
    public final void rule__PatternBody__Group__1__Impl() throws RecognitionException {

        		int stackSize = keepStackSize();
            
        try {
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:578:1: ( ( ( rule__PatternBody__PatternBodyAssignment_1 )* ) )
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:579:1: ( ( rule__PatternBody__PatternBodyAssignment_1 )* )
            {
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:579:1: ( ( rule__PatternBody__PatternBodyAssignment_1 )* )
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:580:1: ( rule__PatternBody__PatternBodyAssignment_1 )*
            {
             before(grammarAccess.getPatternBodyAccess().getPatternBodyAssignment_1()); 
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:581:1: ( rule__PatternBody__PatternBodyAssignment_1 )*
            loop5:
            do {
                int alt5=2;
                int LA5_0 = input.LA(1);

                if ( (LA5_0==RULE_STRING||LA5_0==20||LA5_0==22||LA5_0==24) ) {
                    alt5=1;
                }


                switch (alt5) {
            	case 1 :
            	    // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:581:2: rule__PatternBody__PatternBodyAssignment_1
            	    {
            	    pushFollow(FOLLOW_rule__PatternBody__PatternBodyAssignment_1_in_rule__PatternBody__Group__1__Impl1175);
            	    rule__PatternBody__PatternBodyAssignment_1();

            	    state._fsp--;


            	    }
            	    break;

            	default :
            	    break loop5;
                }
            } while (true);

             after(grammarAccess.getPatternBodyAccess().getPatternBodyAssignment_1()); 

            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__PatternBody__Group__1__Impl"


    // $ANTLR start "rule__Optional__Group__0"
    // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:595:1: rule__Optional__Group__0 : rule__Optional__Group__0__Impl rule__Optional__Group__1 ;
    public final void rule__Optional__Group__0() throws RecognitionException {

        		int stackSize = keepStackSize();
            
        try {
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:599:1: ( rule__Optional__Group__0__Impl rule__Optional__Group__1 )
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:600:2: rule__Optional__Group__0__Impl rule__Optional__Group__1
            {
            pushFollow(FOLLOW_rule__Optional__Group__0__Impl_in_rule__Optional__Group__01210);
            rule__Optional__Group__0__Impl();

            state._fsp--;

            pushFollow(FOLLOW_rule__Optional__Group__1_in_rule__Optional__Group__01213);
            rule__Optional__Group__1();

            state._fsp--;


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__Optional__Group__0"


    // $ANTLR start "rule__Optional__Group__0__Impl"
    // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:607:1: rule__Optional__Group__0__Impl : ( '{' ) ;
    public final void rule__Optional__Group__0__Impl() throws RecognitionException {

        		int stackSize = keepStackSize();
            
        try {
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:611:1: ( ( '{' ) )
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:612:1: ( '{' )
            {
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:612:1: ( '{' )
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:613:1: '{'
            {
             before(grammarAccess.getOptionalAccess().getLeftCurlyBracketKeyword_0()); 
            match(input,20,FOLLOW_20_in_rule__Optional__Group__0__Impl1241); 
             after(grammarAccess.getOptionalAccess().getLeftCurlyBracketKeyword_0()); 

            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__Optional__Group__0__Impl"


    // $ANTLR start "rule__Optional__Group__1"
    // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:626:1: rule__Optional__Group__1 : rule__Optional__Group__1__Impl rule__Optional__Group__2 ;
    public final void rule__Optional__Group__1() throws RecognitionException {

        		int stackSize = keepStackSize();
            
        try {
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:630:1: ( rule__Optional__Group__1__Impl rule__Optional__Group__2 )
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:631:2: rule__Optional__Group__1__Impl rule__Optional__Group__2
            {
            pushFollow(FOLLOW_rule__Optional__Group__1__Impl_in_rule__Optional__Group__11272);
            rule__Optional__Group__1__Impl();

            state._fsp--;

            pushFollow(FOLLOW_rule__Optional__Group__2_in_rule__Optional__Group__11275);
            rule__Optional__Group__2();

            state._fsp--;


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__Optional__Group__1"


    // $ANTLR start "rule__Optional__Group__1__Impl"
    // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:638:1: rule__Optional__Group__1__Impl : ( ( ( rule__Optional__ItemsAssignment_1 ) ) ( ( rule__Optional__ItemsAssignment_1 )* ) ) ;
    public final void rule__Optional__Group__1__Impl() throws RecognitionException {

        		int stackSize = keepStackSize();
            
        try {
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:642:1: ( ( ( ( rule__Optional__ItemsAssignment_1 ) ) ( ( rule__Optional__ItemsAssignment_1 )* ) ) )
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:643:1: ( ( ( rule__Optional__ItemsAssignment_1 ) ) ( ( rule__Optional__ItemsAssignment_1 )* ) )
            {
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:643:1: ( ( ( rule__Optional__ItemsAssignment_1 ) ) ( ( rule__Optional__ItemsAssignment_1 )* ) )
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:644:1: ( ( rule__Optional__ItemsAssignment_1 ) ) ( ( rule__Optional__ItemsAssignment_1 )* )
            {
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:644:1: ( ( rule__Optional__ItemsAssignment_1 ) )
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:645:1: ( rule__Optional__ItemsAssignment_1 )
            {
             before(grammarAccess.getOptionalAccess().getItemsAssignment_1()); 
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:646:1: ( rule__Optional__ItemsAssignment_1 )
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:646:2: rule__Optional__ItemsAssignment_1
            {
            pushFollow(FOLLOW_rule__Optional__ItemsAssignment_1_in_rule__Optional__Group__1__Impl1304);
            rule__Optional__ItemsAssignment_1();

            state._fsp--;


            }

             after(grammarAccess.getOptionalAccess().getItemsAssignment_1()); 

            }

            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:649:1: ( ( rule__Optional__ItemsAssignment_1 )* )
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:650:1: ( rule__Optional__ItemsAssignment_1 )*
            {
             before(grammarAccess.getOptionalAccess().getItemsAssignment_1()); 
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:651:1: ( rule__Optional__ItemsAssignment_1 )*
            loop6:
            do {
                int alt6=2;
                int LA6_0 = input.LA(1);

                if ( (LA6_0==RULE_STRING||LA6_0==22||LA6_0==24) ) {
                    alt6=1;
                }


                switch (alt6) {
            	case 1 :
            	    // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:651:2: rule__Optional__ItemsAssignment_1
            	    {
            	    pushFollow(FOLLOW_rule__Optional__ItemsAssignment_1_in_rule__Optional__Group__1__Impl1316);
            	    rule__Optional__ItemsAssignment_1();

            	    state._fsp--;


            	    }
            	    break;

            	default :
            	    break loop6;
                }
            } while (true);

             after(grammarAccess.getOptionalAccess().getItemsAssignment_1()); 

            }


            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__Optional__Group__1__Impl"


    // $ANTLR start "rule__Optional__Group__2"
    // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:662:1: rule__Optional__Group__2 : rule__Optional__Group__2__Impl ;
    public final void rule__Optional__Group__2() throws RecognitionException {

        		int stackSize = keepStackSize();
            
        try {
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:666:1: ( rule__Optional__Group__2__Impl )
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:667:2: rule__Optional__Group__2__Impl
            {
            pushFollow(FOLLOW_rule__Optional__Group__2__Impl_in_rule__Optional__Group__21349);
            rule__Optional__Group__2__Impl();

            state._fsp--;


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__Optional__Group__2"


    // $ANTLR start "rule__Optional__Group__2__Impl"
    // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:673:1: rule__Optional__Group__2__Impl : ( '}' ) ;
    public final void rule__Optional__Group__2__Impl() throws RecognitionException {

        		int stackSize = keepStackSize();
            
        try {
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:677:1: ( ( '}' ) )
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:678:1: ( '}' )
            {
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:678:1: ( '}' )
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:679:1: '}'
            {
             before(grammarAccess.getOptionalAccess().getRightCurlyBracketKeyword_2()); 
            match(input,21,FOLLOW_21_in_rule__Optional__Group__2__Impl1377); 
             after(grammarAccess.getOptionalAccess().getRightCurlyBracketKeyword_2()); 

            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__Optional__Group__2__Impl"


    // $ANTLR start "rule__FunctionCall__Group__0"
    // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:698:1: rule__FunctionCall__Group__0 : rule__FunctionCall__Group__0__Impl rule__FunctionCall__Group__1 ;
    public final void rule__FunctionCall__Group__0() throws RecognitionException {

        		int stackSize = keepStackSize();
            
        try {
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:702:1: ( rule__FunctionCall__Group__0__Impl rule__FunctionCall__Group__1 )
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:703:2: rule__FunctionCall__Group__0__Impl rule__FunctionCall__Group__1
            {
            pushFollow(FOLLOW_rule__FunctionCall__Group__0__Impl_in_rule__FunctionCall__Group__01414);
            rule__FunctionCall__Group__0__Impl();

            state._fsp--;

            pushFollow(FOLLOW_rule__FunctionCall__Group__1_in_rule__FunctionCall__Group__01417);
            rule__FunctionCall__Group__1();

            state._fsp--;


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__FunctionCall__Group__0"


    // $ANTLR start "rule__FunctionCall__Group__0__Impl"
    // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:710:1: rule__FunctionCall__Group__0__Impl : ( '[' ) ;
    public final void rule__FunctionCall__Group__0__Impl() throws RecognitionException {

        		int stackSize = keepStackSize();
            
        try {
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:714:1: ( ( '[' ) )
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:715:1: ( '[' )
            {
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:715:1: ( '[' )
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:716:1: '['
            {
             before(grammarAccess.getFunctionCallAccess().getLeftSquareBracketKeyword_0()); 
            match(input,22,FOLLOW_22_in_rule__FunctionCall__Group__0__Impl1445); 
             after(grammarAccess.getFunctionCallAccess().getLeftSquareBracketKeyword_0()); 

            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__FunctionCall__Group__0__Impl"


    // $ANTLR start "rule__FunctionCall__Group__1"
    // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:729:1: rule__FunctionCall__Group__1 : rule__FunctionCall__Group__1__Impl rule__FunctionCall__Group__2 ;
    public final void rule__FunctionCall__Group__1() throws RecognitionException {

        		int stackSize = keepStackSize();
            
        try {
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:733:1: ( rule__FunctionCall__Group__1__Impl rule__FunctionCall__Group__2 )
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:734:2: rule__FunctionCall__Group__1__Impl rule__FunctionCall__Group__2
            {
            pushFollow(FOLLOW_rule__FunctionCall__Group__1__Impl_in_rule__FunctionCall__Group__11476);
            rule__FunctionCall__Group__1__Impl();

            state._fsp--;

            pushFollow(FOLLOW_rule__FunctionCall__Group__2_in_rule__FunctionCall__Group__11479);
            rule__FunctionCall__Group__2();

            state._fsp--;


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__FunctionCall__Group__1"


    // $ANTLR start "rule__FunctionCall__Group__1__Impl"
    // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:741:1: rule__FunctionCall__Group__1__Impl : ( ( rule__FunctionCall__NameAssignment_1 ) ) ;
    public final void rule__FunctionCall__Group__1__Impl() throws RecognitionException {

        		int stackSize = keepStackSize();
            
        try {
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:745:1: ( ( ( rule__FunctionCall__NameAssignment_1 ) ) )
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:746:1: ( ( rule__FunctionCall__NameAssignment_1 ) )
            {
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:746:1: ( ( rule__FunctionCall__NameAssignment_1 ) )
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:747:1: ( rule__FunctionCall__NameAssignment_1 )
            {
             before(grammarAccess.getFunctionCallAccess().getNameAssignment_1()); 
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:748:1: ( rule__FunctionCall__NameAssignment_1 )
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:748:2: rule__FunctionCall__NameAssignment_1
            {
            pushFollow(FOLLOW_rule__FunctionCall__NameAssignment_1_in_rule__FunctionCall__Group__1__Impl1506);
            rule__FunctionCall__NameAssignment_1();

            state._fsp--;


            }

             after(grammarAccess.getFunctionCallAccess().getNameAssignment_1()); 

            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__FunctionCall__Group__1__Impl"


    // $ANTLR start "rule__FunctionCall__Group__2"
    // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:758:1: rule__FunctionCall__Group__2 : rule__FunctionCall__Group__2__Impl rule__FunctionCall__Group__3 ;
    public final void rule__FunctionCall__Group__2() throws RecognitionException {

        		int stackSize = keepStackSize();
            
        try {
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:762:1: ( rule__FunctionCall__Group__2__Impl rule__FunctionCall__Group__3 )
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:763:2: rule__FunctionCall__Group__2__Impl rule__FunctionCall__Group__3
            {
            pushFollow(FOLLOW_rule__FunctionCall__Group__2__Impl_in_rule__FunctionCall__Group__21536);
            rule__FunctionCall__Group__2__Impl();

            state._fsp--;

            pushFollow(FOLLOW_rule__FunctionCall__Group__3_in_rule__FunctionCall__Group__21539);
            rule__FunctionCall__Group__3();

            state._fsp--;


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__FunctionCall__Group__2"


    // $ANTLR start "rule__FunctionCall__Group__2__Impl"
    // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:770:1: rule__FunctionCall__Group__2__Impl : ( ( rule__FunctionCall__ArgumentsAssignment_2 )* ) ;
    public final void rule__FunctionCall__Group__2__Impl() throws RecognitionException {

        		int stackSize = keepStackSize();
            
        try {
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:774:1: ( ( ( rule__FunctionCall__ArgumentsAssignment_2 )* ) )
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:775:1: ( ( rule__FunctionCall__ArgumentsAssignment_2 )* )
            {
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:775:1: ( ( rule__FunctionCall__ArgumentsAssignment_2 )* )
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:776:1: ( rule__FunctionCall__ArgumentsAssignment_2 )*
            {
             before(grammarAccess.getFunctionCallAccess().getArgumentsAssignment_2()); 
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:777:1: ( rule__FunctionCall__ArgumentsAssignment_2 )*
            loop7:
            do {
                int alt7=2;
                int LA7_0 = input.LA(1);

                if ( (LA7_0==24) ) {
                    alt7=1;
                }


                switch (alt7) {
            	case 1 :
            	    // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:777:2: rule__FunctionCall__ArgumentsAssignment_2
            	    {
            	    pushFollow(FOLLOW_rule__FunctionCall__ArgumentsAssignment_2_in_rule__FunctionCall__Group__2__Impl1566);
            	    rule__FunctionCall__ArgumentsAssignment_2();

            	    state._fsp--;


            	    }
            	    break;

            	default :
            	    break loop7;
                }
            } while (true);

             after(grammarAccess.getFunctionCallAccess().getArgumentsAssignment_2()); 

            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__FunctionCall__Group__2__Impl"


    // $ANTLR start "rule__FunctionCall__Group__3"
    // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:787:1: rule__FunctionCall__Group__3 : rule__FunctionCall__Group__3__Impl ;
    public final void rule__FunctionCall__Group__3() throws RecognitionException {

        		int stackSize = keepStackSize();
            
        try {
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:791:1: ( rule__FunctionCall__Group__3__Impl )
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:792:2: rule__FunctionCall__Group__3__Impl
            {
            pushFollow(FOLLOW_rule__FunctionCall__Group__3__Impl_in_rule__FunctionCall__Group__31597);
            rule__FunctionCall__Group__3__Impl();

            state._fsp--;


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__FunctionCall__Group__3"


    // $ANTLR start "rule__FunctionCall__Group__3__Impl"
    // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:798:1: rule__FunctionCall__Group__3__Impl : ( ']' ) ;
    public final void rule__FunctionCall__Group__3__Impl() throws RecognitionException {

        		int stackSize = keepStackSize();
            
        try {
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:802:1: ( ( ']' ) )
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:803:1: ( ']' )
            {
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:803:1: ( ']' )
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:804:1: ']'
            {
             before(grammarAccess.getFunctionCallAccess().getRightSquareBracketKeyword_3()); 
            match(input,23,FOLLOW_23_in_rule__FunctionCall__Group__3__Impl1625); 
             after(grammarAccess.getFunctionCallAccess().getRightSquareBracketKeyword_3()); 

            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__FunctionCall__Group__3__Impl"


    // $ANTLR start "rule__Insertion__Group__0"
    // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:825:1: rule__Insertion__Group__0 : rule__Insertion__Group__0__Impl rule__Insertion__Group__1 ;
    public final void rule__Insertion__Group__0() throws RecognitionException {

        		int stackSize = keepStackSize();
            
        try {
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:829:1: ( rule__Insertion__Group__0__Impl rule__Insertion__Group__1 )
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:830:2: rule__Insertion__Group__0__Impl rule__Insertion__Group__1
            {
            pushFollow(FOLLOW_rule__Insertion__Group__0__Impl_in_rule__Insertion__Group__01664);
            rule__Insertion__Group__0__Impl();

            state._fsp--;

            pushFollow(FOLLOW_rule__Insertion__Group__1_in_rule__Insertion__Group__01667);
            rule__Insertion__Group__1();

            state._fsp--;


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__Insertion__Group__0"


    // $ANTLR start "rule__Insertion__Group__0__Impl"
    // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:837:1: rule__Insertion__Group__0__Impl : ( () ) ;
    public final void rule__Insertion__Group__0__Impl() throws RecognitionException {

        		int stackSize = keepStackSize();
            
        try {
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:841:1: ( ( () ) )
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:842:1: ( () )
            {
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:842:1: ( () )
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:843:1: ()
            {
             before(grammarAccess.getInsertionAccess().getInsertionAction_0()); 
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:844:1: ()
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:846:1: 
            {
            }

             after(grammarAccess.getInsertionAccess().getInsertionAction_0()); 

            }


            }

        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__Insertion__Group__0__Impl"


    // $ANTLR start "rule__Insertion__Group__1"
    // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:856:1: rule__Insertion__Group__1 : rule__Insertion__Group__1__Impl rule__Insertion__Group__2 ;
    public final void rule__Insertion__Group__1() throws RecognitionException {

        		int stackSize = keepStackSize();
            
        try {
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:860:1: ( rule__Insertion__Group__1__Impl rule__Insertion__Group__2 )
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:861:2: rule__Insertion__Group__1__Impl rule__Insertion__Group__2
            {
            pushFollow(FOLLOW_rule__Insertion__Group__1__Impl_in_rule__Insertion__Group__11725);
            rule__Insertion__Group__1__Impl();

            state._fsp--;

            pushFollow(FOLLOW_rule__Insertion__Group__2_in_rule__Insertion__Group__11728);
            rule__Insertion__Group__2();

            state._fsp--;


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__Insertion__Group__1"


    // $ANTLR start "rule__Insertion__Group__1__Impl"
    // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:868:1: rule__Insertion__Group__1__Impl : ( '$' ) ;
    public final void rule__Insertion__Group__1__Impl() throws RecognitionException {

        		int stackSize = keepStackSize();
            
        try {
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:872:1: ( ( '$' ) )
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:873:1: ( '$' )
            {
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:873:1: ( '$' )
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:874:1: '$'
            {
             before(grammarAccess.getInsertionAccess().getDollarSignKeyword_1()); 
            match(input,24,FOLLOW_24_in_rule__Insertion__Group__1__Impl1756); 
             after(grammarAccess.getInsertionAccess().getDollarSignKeyword_1()); 

            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__Insertion__Group__1__Impl"


    // $ANTLR start "rule__Insertion__Group__2"
    // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:887:1: rule__Insertion__Group__2 : rule__Insertion__Group__2__Impl rule__Insertion__Group__3 ;
    public final void rule__Insertion__Group__2() throws RecognitionException {

        		int stackSize = keepStackSize();
            
        try {
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:891:1: ( rule__Insertion__Group__2__Impl rule__Insertion__Group__3 )
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:892:2: rule__Insertion__Group__2__Impl rule__Insertion__Group__3
            {
            pushFollow(FOLLOW_rule__Insertion__Group__2__Impl_in_rule__Insertion__Group__21787);
            rule__Insertion__Group__2__Impl();

            state._fsp--;

            pushFollow(FOLLOW_rule__Insertion__Group__3_in_rule__Insertion__Group__21790);
            rule__Insertion__Group__3();

            state._fsp--;


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__Insertion__Group__2"


    // $ANTLR start "rule__Insertion__Group__2__Impl"
    // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:899:1: rule__Insertion__Group__2__Impl : ( ( rule__Insertion__IndexAssignment_2 )? ) ;
    public final void rule__Insertion__Group__2__Impl() throws RecognitionException {

        		int stackSize = keepStackSize();
            
        try {
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:903:1: ( ( ( rule__Insertion__IndexAssignment_2 )? ) )
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:904:1: ( ( rule__Insertion__IndexAssignment_2 )? )
            {
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:904:1: ( ( rule__Insertion__IndexAssignment_2 )? )
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:905:1: ( rule__Insertion__IndexAssignment_2 )?
            {
             before(grammarAccess.getInsertionAccess().getIndexAssignment_2()); 
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:906:1: ( rule__Insertion__IndexAssignment_2 )?
            int alt8=2;
            int LA8_0 = input.LA(1);

            if ( (LA8_0==RULE_INT) ) {
                alt8=1;
            }
            switch (alt8) {
                case 1 :
                    // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:906:2: rule__Insertion__IndexAssignment_2
                    {
                    pushFollow(FOLLOW_rule__Insertion__IndexAssignment_2_in_rule__Insertion__Group__2__Impl1817);
                    rule__Insertion__IndexAssignment_2();

                    state._fsp--;


                    }
                    break;

            }

             after(grammarAccess.getInsertionAccess().getIndexAssignment_2()); 

            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__Insertion__Group__2__Impl"


    // $ANTLR start "rule__Insertion__Group__3"
    // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:916:1: rule__Insertion__Group__3 : rule__Insertion__Group__3__Impl ;
    public final void rule__Insertion__Group__3() throws RecognitionException {

        		int stackSize = keepStackSize();
            
        try {
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:920:1: ( rule__Insertion__Group__3__Impl )
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:921:2: rule__Insertion__Group__3__Impl
            {
            pushFollow(FOLLOW_rule__Insertion__Group__3__Impl_in_rule__Insertion__Group__31848);
            rule__Insertion__Group__3__Impl();

            state._fsp--;


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__Insertion__Group__3"


    // $ANTLR start "rule__Insertion__Group__3__Impl"
    // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:927:1: rule__Insertion__Group__3__Impl : ( ( rule__Insertion__TypeAssignment_3 )? ) ;
    public final void rule__Insertion__Group__3__Impl() throws RecognitionException {

        		int stackSize = keepStackSize();
            
        try {
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:931:1: ( ( ( rule__Insertion__TypeAssignment_3 )? ) )
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:932:1: ( ( rule__Insertion__TypeAssignment_3 )? )
            {
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:932:1: ( ( rule__Insertion__TypeAssignment_3 )? )
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:933:1: ( rule__Insertion__TypeAssignment_3 )?
            {
             before(grammarAccess.getInsertionAccess().getTypeAssignment_3()); 
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:934:1: ( rule__Insertion__TypeAssignment_3 )?
            int alt9=2;
            int LA9_0 = input.LA(1);

            if ( ((LA9_0>=11 && LA9_0<=18)) ) {
                alt9=1;
            }
            switch (alt9) {
                case 1 :
                    // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:934:2: rule__Insertion__TypeAssignment_3
                    {
                    pushFollow(FOLLOW_rule__Insertion__TypeAssignment_3_in_rule__Insertion__Group__3__Impl1875);
                    rule__Insertion__TypeAssignment_3();

                    state._fsp--;


                    }
                    break;

            }

             after(grammarAccess.getInsertionAccess().getTypeAssignment_3()); 

            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__Insertion__Group__3__Impl"


    // $ANTLR start "rule__PTGSpec__PtgspecsAssignment"
    // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:953:1: rule__PTGSpec__PtgspecsAssignment : ( rulePatternSpec ) ;
    public final void rule__PTGSpec__PtgspecsAssignment() throws RecognitionException {

        		int stackSize = keepStackSize();
            
        try {
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:957:1: ( ( rulePatternSpec ) )
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:958:1: ( rulePatternSpec )
            {
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:958:1: ( rulePatternSpec )
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:959:1: rulePatternSpec
            {
             before(grammarAccess.getPTGSpecAccess().getPtgspecsPatternSpecParserRuleCall_0()); 
            pushFollow(FOLLOW_rulePatternSpec_in_rule__PTGSpec__PtgspecsAssignment1919);
            rulePatternSpec();

            state._fsp--;

             after(grammarAccess.getPTGSpecAccess().getPtgspecsPatternSpecParserRuleCall_0()); 

            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__PTGSpec__PtgspecsAssignment"


    // $ANTLR start "rule__PatternSpec__NameAssignment_0"
    // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:968:1: rule__PatternSpec__NameAssignment_0 : ( RULE_ID ) ;
    public final void rule__PatternSpec__NameAssignment_0() throws RecognitionException {

        		int stackSize = keepStackSize();
            
        try {
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:972:1: ( ( RULE_ID ) )
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:973:1: ( RULE_ID )
            {
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:973:1: ( RULE_ID )
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:974:1: RULE_ID
            {
             before(grammarAccess.getPatternSpecAccess().getNameIDTerminalRuleCall_0_0()); 
            match(input,RULE_ID,FOLLOW_RULE_ID_in_rule__PatternSpec__NameAssignment_01950); 
             after(grammarAccess.getPatternSpecAccess().getNameIDTerminalRuleCall_0_0()); 

            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__PatternSpec__NameAssignment_0"


    // $ANTLR start "rule__PatternSpec__PatternBodyAssignment_2"
    // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:983:1: rule__PatternSpec__PatternBodyAssignment_2 : ( rulePatternBody ) ;
    public final void rule__PatternSpec__PatternBodyAssignment_2() throws RecognitionException {

        		int stackSize = keepStackSize();
            
        try {
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:987:1: ( ( rulePatternBody ) )
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:988:1: ( rulePatternBody )
            {
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:988:1: ( rulePatternBody )
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:989:1: rulePatternBody
            {
             before(grammarAccess.getPatternSpecAccess().getPatternBodyPatternBodyParserRuleCall_2_0()); 
            pushFollow(FOLLOW_rulePatternBody_in_rule__PatternSpec__PatternBodyAssignment_21981);
            rulePatternBody();

            state._fsp--;

             after(grammarAccess.getPatternSpecAccess().getPatternBodyPatternBodyParserRuleCall_2_0()); 

            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__PatternSpec__PatternBodyAssignment_2"


    // $ANTLR start "rule__PatternBody__PatternBodyAssignment_1"
    // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:998:1: rule__PatternBody__PatternBodyAssignment_1 : ( ( rule__PatternBody__PatternBodyAlternatives_1_0 ) ) ;
    public final void rule__PatternBody__PatternBodyAssignment_1() throws RecognitionException {

        		int stackSize = keepStackSize();
            
        try {
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:1002:1: ( ( ( rule__PatternBody__PatternBodyAlternatives_1_0 ) ) )
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:1003:1: ( ( rule__PatternBody__PatternBodyAlternatives_1_0 ) )
            {
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:1003:1: ( ( rule__PatternBody__PatternBodyAlternatives_1_0 ) )
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:1004:1: ( rule__PatternBody__PatternBodyAlternatives_1_0 )
            {
             before(grammarAccess.getPatternBodyAccess().getPatternBodyAlternatives_1_0()); 
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:1005:1: ( rule__PatternBody__PatternBodyAlternatives_1_0 )
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:1005:2: rule__PatternBody__PatternBodyAlternatives_1_0
            {
            pushFollow(FOLLOW_rule__PatternBody__PatternBodyAlternatives_1_0_in_rule__PatternBody__PatternBodyAssignment_12012);
            rule__PatternBody__PatternBodyAlternatives_1_0();

            state._fsp--;


            }

             after(grammarAccess.getPatternBodyAccess().getPatternBodyAlternatives_1_0()); 

            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__PatternBody__PatternBodyAssignment_1"


    // $ANTLR start "rule__Optional__ItemsAssignment_1"
    // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:1014:1: rule__Optional__ItemsAssignment_1 : ( ruleItem ) ;
    public final void rule__Optional__ItemsAssignment_1() throws RecognitionException {

        		int stackSize = keepStackSize();
            
        try {
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:1018:1: ( ( ruleItem ) )
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:1019:1: ( ruleItem )
            {
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:1019:1: ( ruleItem )
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:1020:1: ruleItem
            {
             before(grammarAccess.getOptionalAccess().getItemsItemParserRuleCall_1_0()); 
            pushFollow(FOLLOW_ruleItem_in_rule__Optional__ItemsAssignment_12045);
            ruleItem();

            state._fsp--;

             after(grammarAccess.getOptionalAccess().getItemsItemParserRuleCall_1_0()); 

            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__Optional__ItemsAssignment_1"


    // $ANTLR start "rule__Item__ItemNameAssignment_0"
    // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:1029:1: rule__Item__ItemNameAssignment_0 : ( RULE_STRING ) ;
    public final void rule__Item__ItemNameAssignment_0() throws RecognitionException {

        		int stackSize = keepStackSize();
            
        try {
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:1033:1: ( ( RULE_STRING ) )
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:1034:1: ( RULE_STRING )
            {
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:1034:1: ( RULE_STRING )
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:1035:1: RULE_STRING
            {
             before(grammarAccess.getItemAccess().getItemNameSTRINGTerminalRuleCall_0_0()); 
            match(input,RULE_STRING,FOLLOW_RULE_STRING_in_rule__Item__ItemNameAssignment_02076); 
             after(grammarAccess.getItemAccess().getItemNameSTRINGTerminalRuleCall_0_0()); 

            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__Item__ItemNameAssignment_0"


    // $ANTLR start "rule__Item__ItemCallAssignment_1"
    // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:1044:1: rule__Item__ItemCallAssignment_1 : ( ruleFunctionCall ) ;
    public final void rule__Item__ItemCallAssignment_1() throws RecognitionException {

        		int stackSize = keepStackSize();
            
        try {
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:1048:1: ( ( ruleFunctionCall ) )
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:1049:1: ( ruleFunctionCall )
            {
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:1049:1: ( ruleFunctionCall )
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:1050:1: ruleFunctionCall
            {
             before(grammarAccess.getItemAccess().getItemCallFunctionCallParserRuleCall_1_0()); 
            pushFollow(FOLLOW_ruleFunctionCall_in_rule__Item__ItemCallAssignment_12107);
            ruleFunctionCall();

            state._fsp--;

             after(grammarAccess.getItemAccess().getItemCallFunctionCallParserRuleCall_1_0()); 

            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__Item__ItemCallAssignment_1"


    // $ANTLR start "rule__Item__InsertionAssignment_2"
    // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:1059:1: rule__Item__InsertionAssignment_2 : ( ruleInsertion ) ;
    public final void rule__Item__InsertionAssignment_2() throws RecognitionException {

        		int stackSize = keepStackSize();
            
        try {
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:1063:1: ( ( ruleInsertion ) )
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:1064:1: ( ruleInsertion )
            {
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:1064:1: ( ruleInsertion )
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:1065:1: ruleInsertion
            {
             before(grammarAccess.getItemAccess().getInsertionInsertionParserRuleCall_2_0()); 
            pushFollow(FOLLOW_ruleInsertion_in_rule__Item__InsertionAssignment_22138);
            ruleInsertion();

            state._fsp--;

             after(grammarAccess.getItemAccess().getInsertionInsertionParserRuleCall_2_0()); 

            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__Item__InsertionAssignment_2"


    // $ANTLR start "rule__FunctionCall__NameAssignment_1"
    // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:1074:1: rule__FunctionCall__NameAssignment_1 : ( RULE_ID ) ;
    public final void rule__FunctionCall__NameAssignment_1() throws RecognitionException {

        		int stackSize = keepStackSize();
            
        try {
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:1078:1: ( ( RULE_ID ) )
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:1079:1: ( RULE_ID )
            {
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:1079:1: ( RULE_ID )
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:1080:1: RULE_ID
            {
             before(grammarAccess.getFunctionCallAccess().getNameIDTerminalRuleCall_1_0()); 
            match(input,RULE_ID,FOLLOW_RULE_ID_in_rule__FunctionCall__NameAssignment_12169); 
             after(grammarAccess.getFunctionCallAccess().getNameIDTerminalRuleCall_1_0()); 

            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__FunctionCall__NameAssignment_1"


    // $ANTLR start "rule__FunctionCall__ArgumentsAssignment_2"
    // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:1089:1: rule__FunctionCall__ArgumentsAssignment_2 : ( ruleArgument ) ;
    public final void rule__FunctionCall__ArgumentsAssignment_2() throws RecognitionException {

        		int stackSize = keepStackSize();
            
        try {
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:1093:1: ( ( ruleArgument ) )
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:1094:1: ( ruleArgument )
            {
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:1094:1: ( ruleArgument )
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:1095:1: ruleArgument
            {
             before(grammarAccess.getFunctionCallAccess().getArgumentsArgumentParserRuleCall_2_0()); 
            pushFollow(FOLLOW_ruleArgument_in_rule__FunctionCall__ArgumentsAssignment_22200);
            ruleArgument();

            state._fsp--;

             after(grammarAccess.getFunctionCallAccess().getArgumentsArgumentParserRuleCall_2_0()); 

            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__FunctionCall__ArgumentsAssignment_2"


    // $ANTLR start "rule__Argument__InsertionAssignment"
    // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:1104:1: rule__Argument__InsertionAssignment : ( ruleInsertion ) ;
    public final void rule__Argument__InsertionAssignment() throws RecognitionException {

        		int stackSize = keepStackSize();
            
        try {
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:1108:1: ( ( ruleInsertion ) )
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:1109:1: ( ruleInsertion )
            {
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:1109:1: ( ruleInsertion )
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:1110:1: ruleInsertion
            {
             before(grammarAccess.getArgumentAccess().getInsertionInsertionParserRuleCall_0()); 
            pushFollow(FOLLOW_ruleInsertion_in_rule__Argument__InsertionAssignment2231);
            ruleInsertion();

            state._fsp--;

             after(grammarAccess.getArgumentAccess().getInsertionInsertionParserRuleCall_0()); 

            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__Argument__InsertionAssignment"


    // $ANTLR start "rule__Insertion__IndexAssignment_2"
    // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:1119:1: rule__Insertion__IndexAssignment_2 : ( RULE_INT ) ;
    public final void rule__Insertion__IndexAssignment_2() throws RecognitionException {

        		int stackSize = keepStackSize();
            
        try {
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:1123:1: ( ( RULE_INT ) )
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:1124:1: ( RULE_INT )
            {
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:1124:1: ( RULE_INT )
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:1125:1: RULE_INT
            {
             before(grammarAccess.getInsertionAccess().getIndexINTTerminalRuleCall_2_0()); 
            match(input,RULE_INT,FOLLOW_RULE_INT_in_rule__Insertion__IndexAssignment_22262); 
             after(grammarAccess.getInsertionAccess().getIndexINTTerminalRuleCall_2_0()); 

            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__Insertion__IndexAssignment_2"


    // $ANTLR start "rule__Insertion__TypeAssignment_3"
    // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:1134:1: rule__Insertion__TypeAssignment_3 : ( ruleType ) ;
    public final void rule__Insertion__TypeAssignment_3() throws RecognitionException {

        		int stackSize = keepStackSize();
            
        try {
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:1138:1: ( ( ruleType ) )
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:1139:1: ( ruleType )
            {
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:1139:1: ( ruleType )
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:1140:1: ruleType
            {
             before(grammarAccess.getInsertionAccess().getTypeTypeParserRuleCall_3_0()); 
            pushFollow(FOLLOW_ruleType_in_rule__Insertion__TypeAssignment_32293);
            ruleType();

            state._fsp--;

             after(grammarAccess.getInsertionAccess().getTypeTypeParserRuleCall_3_0()); 

            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__Insertion__TypeAssignment_3"


    // $ANTLR start "rule__Type__NameAssignment"
    // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:1149:1: rule__Type__NameAssignment : ( ( rule__Type__NameAlternatives_0 ) ) ;
    public final void rule__Type__NameAssignment() throws RecognitionException {

        		int stackSize = keepStackSize();
            
        try {
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:1153:1: ( ( ( rule__Type__NameAlternatives_0 ) ) )
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:1154:1: ( ( rule__Type__NameAlternatives_0 ) )
            {
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:1154:1: ( ( rule__Type__NameAlternatives_0 ) )
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:1155:1: ( rule__Type__NameAlternatives_0 )
            {
             before(grammarAccess.getTypeAccess().getNameAlternatives_0()); 
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:1156:1: ( rule__Type__NameAlternatives_0 )
            // ../de.sabram.upb.specs.ptg.ui/src-gen/de/sabram/upb/specs/ui/contentassist/antlr/internal/InternalPtg.g:1156:2: rule__Type__NameAlternatives_0
            {
            pushFollow(FOLLOW_rule__Type__NameAlternatives_0_in_rule__Type__NameAssignment2324);
            rule__Type__NameAlternatives_0();

            state._fsp--;


            }

             after(grammarAccess.getTypeAccess().getNameAlternatives_0()); 

            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {

            	restoreStackSize(stackSize);

        }
        return ;
    }
    // $ANTLR end "rule__Type__NameAssignment"

    // Delegated rules


 

    public static final BitSet FOLLOW_rulePTGSpec_in_entryRulePTGSpec61 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRulePTGSpec68 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_rule__PTGSpec__PtgspecsAssignment_in_rulePTGSpec94 = new BitSet(new long[]{0x0000000000000012L});
    public static final BitSet FOLLOW_rulePatternSpec_in_entryRulePatternSpec122 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRulePatternSpec129 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_rule__PatternSpec__Group__0_in_rulePatternSpec155 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_rulePatternBody_in_entryRulePatternBody182 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRulePatternBody189 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_rule__PatternBody__Group__0_in_rulePatternBody215 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleOptional_in_entryRuleOptional242 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleOptional249 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_rule__Optional__Group__0_in_ruleOptional275 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleItem_in_entryRuleItem302 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleItem309 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_rule__Item__Alternatives_in_ruleItem335 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleFunctionCall_in_entryRuleFunctionCall362 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleFunctionCall369 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_rule__FunctionCall__Group__0_in_ruleFunctionCall395 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleArgument_in_entryRuleArgument422 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleArgument429 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_rule__Argument__InsertionAssignment_in_ruleArgument455 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleInsertion_in_entryRuleInsertion482 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleInsertion489 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_rule__Insertion__Group__0_in_ruleInsertion515 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleType_in_entryRuleType542 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleType549 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_rule__Type__NameAssignment_in_ruleType575 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleItem_in_rule__PatternBody__PatternBodyAlternatives_1_0611 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleOptional_in_rule__PatternBody__PatternBodyAlternatives_1_0628 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_rule__Item__ItemNameAssignment_0_in_rule__Item__Alternatives660 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_rule__Item__ItemCallAssignment_1_in_rule__Item__Alternatives678 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_rule__Item__InsertionAssignment_2_in_rule__Item__Alternatives696 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_11_in_rule__Type__NameAlternatives_0730 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_12_in_rule__Type__NameAlternatives_0750 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_13_in_rule__Type__NameAlternatives_0770 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_14_in_rule__Type__NameAlternatives_0790 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_15_in_rule__Type__NameAlternatives_0810 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_16_in_rule__Type__NameAlternatives_0830 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_17_in_rule__Type__NameAlternatives_0850 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_18_in_rule__Type__NameAlternatives_0870 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_rule__PatternSpec__Group__0__Impl_in_rule__PatternSpec__Group__0902 = new BitSet(new long[]{0x0000000000080000L});
    public static final BitSet FOLLOW_rule__PatternSpec__Group__1_in_rule__PatternSpec__Group__0905 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_rule__PatternSpec__NameAssignment_0_in_rule__PatternSpec__Group__0__Impl932 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_rule__PatternSpec__Group__1__Impl_in_rule__PatternSpec__Group__1962 = new BitSet(new long[]{0x0000000001500020L});
    public static final BitSet FOLLOW_rule__PatternSpec__Group__2_in_rule__PatternSpec__Group__1965 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_19_in_rule__PatternSpec__Group__1__Impl993 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_rule__PatternSpec__Group__2__Impl_in_rule__PatternSpec__Group__21024 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_rule__PatternSpec__PatternBodyAssignment_2_in_rule__PatternSpec__Group__2__Impl1051 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_rule__PatternBody__Group__0__Impl_in_rule__PatternBody__Group__01087 = new BitSet(new long[]{0x0000000001500020L});
    public static final BitSet FOLLOW_rule__PatternBody__Group__1_in_rule__PatternBody__Group__01090 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_rule__PatternBody__Group__1__Impl_in_rule__PatternBody__Group__11148 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_rule__PatternBody__PatternBodyAssignment_1_in_rule__PatternBody__Group__1__Impl1175 = new BitSet(new long[]{0x0000000001500022L});
    public static final BitSet FOLLOW_rule__Optional__Group__0__Impl_in_rule__Optional__Group__01210 = new BitSet(new long[]{0x0000000001400020L});
    public static final BitSet FOLLOW_rule__Optional__Group__1_in_rule__Optional__Group__01213 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_20_in_rule__Optional__Group__0__Impl1241 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_rule__Optional__Group__1__Impl_in_rule__Optional__Group__11272 = new BitSet(new long[]{0x0000000000200000L});
    public static final BitSet FOLLOW_rule__Optional__Group__2_in_rule__Optional__Group__11275 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_rule__Optional__ItemsAssignment_1_in_rule__Optional__Group__1__Impl1304 = new BitSet(new long[]{0x0000000001400022L});
    public static final BitSet FOLLOW_rule__Optional__ItemsAssignment_1_in_rule__Optional__Group__1__Impl1316 = new BitSet(new long[]{0x0000000001400022L});
    public static final BitSet FOLLOW_rule__Optional__Group__2__Impl_in_rule__Optional__Group__21349 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_21_in_rule__Optional__Group__2__Impl1377 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_rule__FunctionCall__Group__0__Impl_in_rule__FunctionCall__Group__01414 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_rule__FunctionCall__Group__1_in_rule__FunctionCall__Group__01417 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_22_in_rule__FunctionCall__Group__0__Impl1445 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_rule__FunctionCall__Group__1__Impl_in_rule__FunctionCall__Group__11476 = new BitSet(new long[]{0x0000000001C00020L});
    public static final BitSet FOLLOW_rule__FunctionCall__Group__2_in_rule__FunctionCall__Group__11479 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_rule__FunctionCall__NameAssignment_1_in_rule__FunctionCall__Group__1__Impl1506 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_rule__FunctionCall__Group__2__Impl_in_rule__FunctionCall__Group__21536 = new BitSet(new long[]{0x0000000001C00020L});
    public static final BitSet FOLLOW_rule__FunctionCall__Group__3_in_rule__FunctionCall__Group__21539 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_rule__FunctionCall__ArgumentsAssignment_2_in_rule__FunctionCall__Group__2__Impl1566 = new BitSet(new long[]{0x0000000001400022L});
    public static final BitSet FOLLOW_rule__FunctionCall__Group__3__Impl_in_rule__FunctionCall__Group__31597 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_23_in_rule__FunctionCall__Group__3__Impl1625 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_rule__Insertion__Group__0__Impl_in_rule__Insertion__Group__01664 = new BitSet(new long[]{0x0000000001400020L});
    public static final BitSet FOLLOW_rule__Insertion__Group__1_in_rule__Insertion__Group__01667 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_rule__Insertion__Group__1__Impl_in_rule__Insertion__Group__11725 = new BitSet(new long[]{0x000000000007F840L});
    public static final BitSet FOLLOW_rule__Insertion__Group__2_in_rule__Insertion__Group__11728 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_24_in_rule__Insertion__Group__1__Impl1756 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_rule__Insertion__Group__2__Impl_in_rule__Insertion__Group__21787 = new BitSet(new long[]{0x000000000007F840L});
    public static final BitSet FOLLOW_rule__Insertion__Group__3_in_rule__Insertion__Group__21790 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_rule__Insertion__IndexAssignment_2_in_rule__Insertion__Group__2__Impl1817 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_rule__Insertion__Group__3__Impl_in_rule__Insertion__Group__31848 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_rule__Insertion__TypeAssignment_3_in_rule__Insertion__Group__3__Impl1875 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_rulePatternSpec_in_rule__PTGSpec__PtgspecsAssignment1919 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_RULE_ID_in_rule__PatternSpec__NameAssignment_01950 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_rulePatternBody_in_rule__PatternSpec__PatternBodyAssignment_21981 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_rule__PatternBody__PatternBodyAlternatives_1_0_in_rule__PatternBody__PatternBodyAssignment_12012 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleItem_in_rule__Optional__ItemsAssignment_12045 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_RULE_STRING_in_rule__Item__ItemNameAssignment_02076 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleFunctionCall_in_rule__Item__ItemCallAssignment_12107 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleInsertion_in_rule__Item__InsertionAssignment_22138 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_RULE_ID_in_rule__FunctionCall__NameAssignment_12169 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleArgument_in_rule__FunctionCall__ArgumentsAssignment_22200 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleInsertion_in_rule__Argument__InsertionAssignment2231 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_RULE_INT_in_rule__Insertion__IndexAssignment_22262 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleType_in_rule__Insertion__TypeAssignment_32293 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_rule__Type__NameAlternatives_0_in_rule__Type__NameAssignment2324 = new BitSet(new long[]{0x0000000000000002L});

}